iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
0
自我挑戰組

Git學習筆記系列 第 12

Git指令 git rebase

  • 分享至 

  • xImage
  •  

分支的整併方式有二,分別是merge及rebase

merge之前就有用過

這次練習一下rebase

我們先在master這個分支上另建一個分支iss2

接著在master上繼續開發並且commit

再來切換到iss2上去解iss2的問題

解完也commit一版

現在從master的角度看的線圖就會是這樣

Imgur

如果用之前提過的merge方式去合併(在master上用指令git merge iss2)

線圖會是這樣

Imgur

一個這樣的情況就多了一條這種merge的線

專案中有很多這種分支合併的情況時,線圖就會很亂

rebase指令可以解決這個問題

我們先將master版本reset到還沒合併前的HEAD,也就是我的版本8a7738a...

切換到iss2

git checkout iss2

下指令git rebase master

​$ git rebase master 
First, rewinding head to replay your work on top of it...
Applying: start fix iss2
Using index info to reconstruct a base tree...
M	index.html
Falling back to patching base and 3-way merge...
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Failed to merge in the changes.
Patch failed at 0001 start fix iss2
The copy of the patch that failed is found in:
   /Users/morrishsu/Documents/git/momoRep/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

會發現上面有一堆提示訊息,主要是表達你去解決一下衝突,若衝突解決可以再次使用git rebase --continue指令來繼續rebase作業

若要取消的話就可以下git rebase --skip

所以當我們解決了衝突後

一樣先用git add .

這邊不需要commit

現在衝突已解決

可以下git rebase --continue

​$ git rebase --continue
Applying: start fix iss2
Applying: iss2 fixed
Using index info to reconstruct a base tree...
M	index.html
Falling back to patching base and 3-way merge...
Auto-merging index.html

在時候去看線圖會是這樣

Imgur

可以發現跟之前用merge指令時產生的線圖不一樣

只有一條線,沒有分歧之後又合併的線

後記

作完上述步驟後還要記得在master上執行merge來合併rebase後的commit

git merge iss2

Git 分支 - 分支的衍合


上一篇
重設遠端版本庫位址
下一篇
Git 小劇場 git stash part 2
系列文
Git學習筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言